/*
 * Klasse enthält alle relevanten DB-Operationen für Kategorien als statische Methoden
 * 
 */

package com.mysql;

import com.objects.category;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author admin
 */

import java.util.ArrayList;

public class mysqlCategories {


    //statische Methode, die alle Kategorien aus der DB ausliest und als ArrayList zurückgibt
    public static ArrayList<category> getAllCategories () throws Exception
    {
        //Verbindung zur Datenbank über mysqlConnector-Klasse
        mysqlConnector con = new mysqlConnector();
        try
        {
            //neue ArrayList instanziieren (später Rückgabeparameter)
            ArrayList<category> retArr=new ArrayList();
            //neues SQL-Statement mit der Verbindung zur DB erzeugen
            Statement state = con.verbMySQL.createStatement();
            //Abfrage der Datenbank über SQL-Statement
            ResultSet result = state.executeQuery("SELECT * FROM TBLCategories");
            //solange Abfrageergebnis eine weitere Zeile besitzt
            while (result.next())
            {
                //neue Category-Objekt zur ArrayList hinzufügen
                retArr.add(new category(result.getInt(1),result.getString(2)));

            }
            //ArrayList zurückgeben
            return retArr;

        }
        //Fehler auffangen und ausgeben
        catch (SQLException ex)
        {
             Logger.getLogger(mysqlFeeds.class.getName()).log(Level.SEVERE,null,ex);

        }
        finally
        {
            //Verbindung immer schließen
            con.verbMySQL.close();
        }
        //Rückgabewert, falls Fehler geworfen werden
        return null;
    }

    //statische Methode, um eine Kategorie anhand des Katorienamens, der übergeben wird, aus der DB zu lesen
    public static category getCategoryByName (String catname) throws Exception
    {
        //Verbindung zur Datenbank über mysqlConnector-Klasse
        mysqlConnector con = new mysqlConnector();
        try
        {
            //neues leeres Category-Objekt anlegen (später Rückgabeparameter)
            category retCat=new category();
            //neues SQL-Statement mit der Verbindung zur DB erzeugen
            Statement state = con.verbMySQL.createStatement();
             //Abfrage der Datenbank über SQL-Statement mithilfe des übergebenen Kategorienamens
            ResultSet result = state.executeQuery("SELECT * FROM TBLCategories WHERE CategoryName='"+catname+"'");
            //wenn Ergebnis eine Zeile zurückliefert
            if (result.next())
            {
                //leeres Category-Objekt mit neuem Objekt aus den Daten der Datenbank überschreiben
                retCat=new category(result.getInt(1),result.getString(2));

            }
            //Category-Objekt zurückgeben
            return retCat;

        }
        //Fehler auffangen und ausgeben
        catch (SQLException ex)
        {
             Logger.getLogger(mysqlFeeds.class.getName()).log(Level.SEVERE,null,ex);

        }
        finally
        {
            //Verbindung immer schließen
            con.verbMySQL.close();
        }
        //Rückgabe bei Fehlern
        return null;
    }

    //statische Methode, die anhand eines Kategorienamens testet, ob die Kategorie schon existiert und dementsprechend true oder false zurückgibt
    public static Boolean checkIfCategoryExists (String catname) throws Exception
    {
        //Verbindung zur Datenbank über mysqlConnector-Klasse
        mysqlConnector con = new mysqlConnector();
        try
        {
           //neues SQL-Statement mit der Verbindung zur DB erzeugen
            Statement state = con.verbMySQL.createStatement();
            //Abfrage der Datenbank über SQL-Statement mithilfe des übergebenen Kategorienamens
            ResultSet result = state.executeQuery("SELECT * FROM TBLCategories WHERE CategoryName='"+catname+"'");
            //wenn eine Zeile zurückgegeben
            if (result.next())
            {
                //gebe wahr zurück
                return true;

            }
            //sonst
            else
            {
                //gebe falsch zurück
                return false;
            }


        }
        //Fehler auffangen und ausgeben
        catch (SQLException ex)
        {
             Logger.getLogger(mysqlFeeds.class.getName()).log(Level.SEVERE,null,ex);

        }
        finally
        {
            //Verbindung zur Datenbank schließen
            con.verbMySQL.close();
        }
        //Falsch zurückgeben, wenn Fehler geworfen werden
        return false;
    }

    //statische Methode, um eine Kategorie anhand der KatorieID, die übergeben wird, aus der DB zu lesen
    public static category getCategoryById (int catid) throws Exception
    {
        //Verbindung zur Datenbank über mysqlConnector-Klasse
        mysqlConnector con = new mysqlConnector();
        try
        {
            //neues leeres Category-Objekt anlegen (später Rückgabeparameter)
            category retCat=new category();
            //neues SQL-Statement mit der Verbindung zur DB erzeugen
            Statement state = con.verbMySQL.createStatement();
             //Abfrage der Datenbank über SQL-Statement mithilfe der übergebenen KategorieID
            ResultSet result = state.executeQuery("SELECT * FROM TBLCategories WHERE CategoryID='"+catid+"'");
            //wenn Ergebnis eine Zeile zurückliefert
            if (result.next())
            {
                //leeres Category-Objekt mit neuem Objekt aus den Daten der Datenbank überschreiben
                retCat=new category(result.getInt(1),result.getString(2));
            }
            //Category-Objekt zurückgeben
            return retCat;

        }
        //Fehler auffangen und ausgeben
        catch (SQLException ex)
        {
             Logger.getLogger(mysqlFeeds.class.getName()).log(Level.SEVERE,null,ex);

        }
        finally
        {
            //Verbindung zur DB immer schließen
            con.verbMySQL.close();
        }
        //Rückgabe bei Fehlern
        return null;
    }

   //statische Methode, um eine neue Kategorie mit einem Namen, der übergeben wird, in der DB zu speichern
   public static Boolean saveNewCat (String catname) throws Exception
   {
       //Verbindung zur Datenbank über mysqlConnector-Klasse
        mysqlConnector con = new mysqlConnector();
        try
        {
             //neues SQL-Statement mit der Verbindung zur DB erzeugen
            Statement state = con.verbMySQL.createStatement();
            //Update der Datenbank über SQL-Statement mithilfe des übergebenen Kategorienamens - wenn Rückgabewert größer null war es ein Erfolg, wenn nicht ist ein Fehler aufgetreten
            if (state.executeUpdate("INSERT INTO TBLCategories (CategoryName) VALUES ('"+catname+"')")>0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
        //Fehler auffangen und ausgeben
        catch (SQLException ex)
        {
             Logger.getLogger(mysqlFeeds.class.getName()).log(Level.SEVERE,null,ex);

        }
        finally
        {
            //Verbindung immer schließen
            con.verbMySQL.close();
        }
        //Rückgabewert bei Fehlern
        return false;
   }

    

   


   
}
